class Solution {//二分查找
/*以nums[n-1]值为基准, 将区间分成两部分, >nums[n-1](最小值不在此区间内)，<=nums[n-1](最小值在此区间内)
边界情况：递增，递减，无需处理，均满足 ——》二段性*/
public:
    int findMin(vector<int>& nums) {
    int n = nums.size(), left = 0, right = n - 1;
    while(left < right) //循环条件
    {
        int mid = left + (right - left) / 2; //中点的选择(后面没有+1,中点就不-1)
        if(nums[mid] <= nums[n - 1]) right = mid;
        else left = mid + 1;
    }
     return nums[left];  
    }
};

class Solution { //二分查找
/*以nums[0]值为基准, 将区间分成两部分, >=nums[0](最小值不在此区间内)，<nums[0](最小值在此区间内)
特殊处理边界情况：递增，left=right, nums[left]>nums[0]* ——》二段性*/
public:
    int findMin(vector<int>& nums) {
    int left = 0, right = nums.size() - 1;
    while(left < right)  //循环条件
    {
        int mid = left + (right - left) / 2; //中点的选择(后面没有+1,中点就不-1)
        if(nums[mid] < nums[0]) right = mid; 
        else left = mid + 1;
    }
    if(nums[left] > nums[0])  return nums[0];  //特殊处理边界情况，递增
    else  return nums[left];  
    }
};